#include<iostream>
using namespace std;

#include<vector>
#include<algorithm>

typedef pair<int, int> PII;

int n;
vector<PII> segs;

void merge(vector<PII> &segs){
    vector<PII> temp;
    // 1.先排序一下
    sort(segs.begin(), segs.end());    //优先左端点，在右端点

    //取一个区间
    int bg = -1e9, ed = -1e9;    //我们当前维护的区间
    // 2.遍历一下:思路明确,
    //{{1, 5}, {4, 8}, {9, 10}};
    for(auto seg:segs){
        //枚举的区间和我们维护的区间没用交集，但也不能是我们初始化的那个
        if(ed<seg.first){
            if(bg!=-1e9){
                temp.push_back({bg, ed});     //这个时候是{1，8}进入了temp二元组，但是也遍历完了
                //更新维护区间
                bg = seg.first;
                ed = seg.second;
            }
        }
        //有了交集，但是肯定左端点是我们当前维护的，那么左端点不知道这两个那个大，求大的
        else{
            ed = max(ed, seg.second);
        }
    }

    // 已经出了循环,把最后一个区间也加入进去{9，10}
    if(bg !=-1e9 ){
        temp.push_back({bg, ed});
    }

    segs = temp;
}

int main(){

    // 1.读入数据谁都会，
    cin >> n;
    for (int i = 0; i < n;i++){
        int l, r;
        cin >> l >> r;
        segs.push_back({l, r});
    }
    // 2.调用合并函数
    merge(segs);

    // 3.打印区间合并之后的个数
    cout << segs.size() << endl;

    return 0;
}